home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 September / PCWorld_2008-09_cd.bin / v cisle / sadanastroju / delicious_bookmarks-2.0.64-fx.xpi / chrome / deliciousBookmarks.jar / content / json.js < prev    next >
Encoding:
JavaScript  |  2008-06-19  |  3.7 KB  |  122 lines

  1. /*
  2.   taken from http://www.unfocus.com/projects/source/Javascript/json.js
  3.   Much saner since it doesn't screw up for in loops like http://www.json.org/js.html
  4.     
  5.   json.js (modified 2006-05-02)
  6.  
  7.     USAGE:
  8.     var jsObj = JSON.parse(jsonStr);
  9.     var jsonStr = JSON.stringify(jsObj);
  10. */
  11. var YBJSON = (function () {
  12.     var m = {
  13.             '\b': '\\b',
  14.             '\t': '\\t',
  15.             '\n': '\\n',
  16.             '\f': '\\f',
  17.             '\r': '\\r',
  18.             '"' : '\\"',
  19.             '\\': '\\\\'
  20.         },
  21.         s = {
  22.             array: function (x) {
  23.                 var a = ['['], b, f, i, l = x.length, v;
  24.                 for (i = 0; i < l; i += 1) {
  25.                     v = x[i];
  26.                     f = s[typeof v];
  27.                     if (f) {
  28.                         v = f(v);
  29.                         if (typeof v == 'string') {
  30.                             if (b) {
  31.                                 a[a.length] = ',';
  32.                             }
  33.                             a[a.length] = v;
  34.                             b = true;
  35.                         }
  36.                     }
  37.                 }
  38.                 a[a.length] = ']';
  39.                 return a.join('');
  40.             },
  41.             'boolean': function (x) {
  42.                 return String(x);
  43.             },
  44.             'null': function (x) {
  45.                 return "null";
  46.             },
  47.             number: function (x) {
  48.                 return isFinite(x) ? String(x) : 'null';
  49.             },
  50.             object: function (x) {
  51.                 if (x) {
  52.                     if (x instanceof Array) {
  53.                         return s.array(x);
  54.                     }
  55.                     var a = ['{'], b, f, i, v;
  56.                     for (i in x) {
  57.                         v = x[i];
  58.                         f = s[typeof v];
  59.                         if (f) {
  60.                             v = f(v);
  61.                             if (typeof v == 'string') {
  62.                                 if (b) {
  63.                                     a[a.length] = ',';
  64.                                 }
  65.                                 a.push(s.string(i), ':', v);
  66.                                 b = true;
  67.                             }
  68.                         }
  69.                     }
  70.                     a[a.length] = '}';
  71.                     return a.join('');
  72.                 }
  73.                 return 'null';
  74.             },
  75.             string: function (x) {
  76.                 if (/["\\\x00-\x1f]/.test(x)) {
  77.                     x = x.replace(/([\x00-\x1f\\"])/g, function(a, b) {
  78.                         var c = m[b];
  79.                         if (c) {
  80.                             return c;
  81.                         }
  82.                         c = b.charCodeAt();
  83.                         return '\\u00' +
  84.                             Math.floor(c / 16).toString(16) +
  85.                             (c % 16).toString(16);
  86.                     });
  87.                 }
  88.                 return '"' + x + '"';
  89.             }
  90.         };
  91.  
  92.     /*Object.prototype.toJSONString = function () {
  93.         return s.object(this);
  94.     };
  95.  
  96.     Array.prototype.toJSONString = function () {
  97.         return s.array(this);
  98.     };*/
  99.     
  100.     return {
  101.         parse: function(s) {
  102.             try {
  103.                 return !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(
  104.                     s.replace(/"(\\.|[^"\\])*"/g, ''))) &&
  105.                     eval('(' + s + ')');
  106.             } catch (e) {
  107.                 return false;
  108.             }
  109.         },
  110.         stringify: s.object
  111.     };
  112. })();
  113.  
  114. /*String.prototype.parseJSON = function () {
  115.     try {
  116.         return !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(
  117.                 this.replace(/"(\\.|[^"\\])*"/g, ''))) &&
  118.             eval('(' + this + ')');
  119.     } catch (e) {
  120.         return false;
  121.     }
  122. };*/